package 数据结构OJ;

/**
 * @author shy_black
 * @date 2019/3/18 15:55
 * @Description:
 *题目解析：首先要明白平衡二叉树的性质才做判断：平衡二叉树就是左子树和右子树的高度差不能超过1，
 * 且左右子树必须是平衡二叉树；
 * 解决方法1：
 * 从根节点开始，先判断左右子树的高度差是否超过1，
 * 然后接着判断左右子树是否是平衡二叉树。
 *
 */
public class 判断是否为平衡二叉树 {
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;

        }

    }
    public boolean IsBalanced_Solution(TreeNode root) {
        if(root == null)
            return true;
        //Math.abs---->求绝对值

        if(Math.abs(getDepth(root.left)-getDepth(root.right)) <= 1){
            IsBalanced_Solution(root.left);
            IsBalanced_Solution(root.right);
            return true;
        }
        else
            return false;
    }
    public static int getDepth(TreeNode root) {
        if(root == null)
            return 0;
        int i = getDepth(root.left);
        int j = getDepth(root.right);
        return (i > j ? i : j) + 1;
    }
}
